Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[정성현] sprint9 #123

Conversation

jsh1147
Copy link
Collaborator

@jsh1147 jsh1147 commented Oct 26, 2024

요구사항

배포 URL

기본

  • 자유 게시판 페이지 주소는 "/boards" 입니다.
  • 전체 게시글에서 드롭 다운으로 "최신 순" 또는 "좋아요 순"을 선택해서 정렬을 할 수 있습니다.
  • 게시글 목록 조회 api를 사용하여 베스트 게시글, 게시글을 구현합니다.
  • 게시글 title에 검색어가 일부 포함되면 검색이 됩니다.

심화

  • 반응형으로 보여지는 베스트 게시판 개수를 다르게 설정할때 서버에 보내는 pageSize값을 적절하게 설정합니다.
  • next의 prefetch 기능을 사용해봅니다.

주요 변경사항

  • Next.js 프레임워크 적용
  • 일부 파일 마이그레이션
  • 자유게시판 일부 구현

스크린샷

  • PC
    image

  • 모바일
    image

멘토에게

  • 프리렌더링 환경에서의 반응형 데이터 패칭을 대체 어떻게 해야 할 지 갈피가 안잡힙니다ㅠ
  • 페이지 구조 자체는 저번 sprint5랑 거의 동일하다시피 해서 로직만 해결되면 될 것 같은데 로직이 쉽지 않습니다..

- 프로젝트 내 불필요 파일 및 코드 제거
- 프로젝트 구조화 및 경로 별칭 적용
- 메타 데이터 작성 및 전역 CSS 적용
- README.md 작성
- 레이아웃 구현 및 App 컴포넌트에 적용
- 헤더 구현
- 관련 페이지 컴포넌트 작성
- api 구조, api 타입, api 훅 구현
- getArticles API 구현
- 미디어 쿼리 적용
- api 적용
- CSS 관련 일부 적용
@jsh1147 jsh1147 requested a review from GANGYIKIM October 26, 2024 14:59
@jsh1147 jsh1147 self-assigned this Oct 26, 2024
@jsh1147 jsh1147 added 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다.. labels Oct 26, 2024
Copy link
Collaborator

@GANGYIKIM GANGYIKIM left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

성현님 이번 스프린트 미션 고생하셨습니다~
여러모로 신경쓰신 부분이 많이 보였습니다. 고민 많이 하신만큼 잘 작성하셔서 리뷰드릴 것이 많이 없었습니다.
말씀해주신 리렌더링 환경에서의 반응형 데이터 패칭을 대체 어떻게 해야 할 지 갈피가 안잡힙니다ㅠ 요부분 코멘트 남겨드렸어요! 성현님 스스로 해결하실 수 있을것 같아 힌트만 드렸으니 하다가 안되시면 DM 주세요~

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3:
👍

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3:
👍

Comment on lines +8 to +10
<Head>
<title>자유게시판 - 판다마켓</title>
</Head>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3:
👍

Comment on lines +14 to +19
useEffect(() => {
setMedia(checkMedia(window.innerWidth));

const handleWindowResize = () => {
setMedia(checkMedia(window.innerWidth));
};
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3:
동일한 코드가 반복되는 것 같아서 아래처럼 하셔도 좋을 것 같습니다.

 const handleWindowResize = useCallback(() => {
    setMedia(checkMedia(window.innerWidth));
  }, []);

  useEffect(() => {
    handleWindowResize();

    window.addEventListener("resize", handleWindowResize);
    return () => {
      window.removeEventListener("resize", handleWindowResize);
    };
  }, [handleWindowResize]);

Comment on lines +11 to +19
export default function BestItem({ data }: ItemProps) {
const {
id,
title,
writer: { nickname },
updatedAt,
image,
likeCount,
} = data;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2:
이렇게 받으셔야 하는 이유가 있을까요?
다른 props를 받는것도 아니라서 data이라는 객체를 받는것보다 각각의 값을 전달받는게 사용하기에 더 편할 것 같아서요~

Copy link
Collaborator Author

@jsh1147 jsh1147 Oct 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

부모 컴포넌트(BestItems)쪽에서 data.id, data.title, ... 이런식으로 뿌리는게 너무 길어져서 받은 data 그대로 전달했는데, 강사님 의견이 BestItem 입장에서 속성을 명시하는데에 더 정확하고 나은 것 같습니다!👍

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2:
처음 실행이 되었을때는 window innerWidth를 읽어와서 크기에 따른 값을 설정해주는 로직이 실행되지 않는다고 말씀해주셨습니다~
코드를 보니 default 값인 PC였다가 곧 window innerWidth에 맞는 값으로 변경이 되는데, 값이 변경된 후 다시 data fetching을 하지 않고 있습니다~

한번 확인해보시고 수정해보시면 좋을 것 같아요~

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인해보니까 생각보다 더 복잡한 것 같습니다.. ㅋㅋㅋㅠㅠ

  1. 초기렌더링으로 인한 effect 실행
  2. state 갱신으로 인한 effect 실행으로 인한 추가적인 state 갱신 & effect 실행

위 2개가 합쳐져서 데이터 패칭이 2~3번 발생하고,
이것이 비동기적이라 발생 순서에 따라 랜덤하게 초기데이터 or 갱신데이터가 보입니다😅
(React StrictMode는 next.config.js에서 false한 상태입니다.)

  • 초기데이터로 끝난 경우
    image
  • 갱신데이터로 끝난 경우
    image

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3:
type을 잘 정리해주신 것 좋습니다~
다만 API를 많이 연결하실수록 해당 파일이 커질가능성이 크니 추후에는 관련된 타입끼리 분리하셔도 좋을 것 같아요~

@GANGYIKIM GANGYIKIM merged commit b26756a into codeit-bootcamp-frontend:Next-정성현 Oct 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. 미완성🫠 죄송합니다..
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants